package com.hzy.fivepalace.db.handle;


import com.hzy.fivepalace.common.exception.AppException;
import com.hzy.fivepalace.common.type.OrderStatusEnums;
import com.hzy.fivepalace.common.util.DateUtils;
import com.hzy.fivepalace.db.domain.DtsOrder;
import com.hzy.fivepalace.db.service.DtsSystemConfigService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Calendar;


/**
 * 订单相关
 */
@Component
public class OrderHandler {

    @Autowired
    private DtsSystemConfigService systemConfigService;


    /**
     * 订单按钮(取消订单、退款、删除等)相关操作判断
     *
     * @param order
     * @return
     */
    public OrderOperator build(DtsOrder order) {
        OrderOperator handleOption = new OrderOperator();

        int status = order.getOrderStatus();
        int period =  systemConfigService.getAfterSalePeriod();//售后周期

        if (OrderStatusEnums.TYPE0.getType() == status) {//待付款，可以取消，可以支付(支付时间未到期)
            if (!LocalDateTime.now().isAfter(order.getEndTime()) && order.getOrderStatus().intValue() != OrderStatusEnums.TYPE6.getType()) {//支付时间未过期可以付款
                handleOption.setPay(true);
            }
            handleOption.setCancel(true);
        } else if (OrderStatusEnums.TYPE1.getType() == status || OrderStatusEnums.TYPE13.getType() == status) {//待发货,可以退款
            if(order.getIsByVip()){
                return handleOption;
            }
            if (order.getActualPrice().compareTo(new BigDecimal("0.00")) > 0) {//实际支付金额大于0才可以退款
                handleOption.setRefund(true);
            }
        } else if (OrderStatusEnums.TYPE2.getType() == status) {//待收货,可以确认收货,非自提订单可以查看物流，可以申请售后
            if(order.getIsByVip()){
                return handleOption;
            }
            handleOption.setConfirm(true);
            if(order.getFreightType().intValue()==0){//配送方式为物流，可以查看物流
                handleOption.setShowLogistics(true);
            }
            handleOption.setApplyAfterSale(true);

        } else if (OrderStatusEnums.TYPE3.getType() == status) {//待评价,可以评价,可以查看物流，在售后周期内可以申请售后
            handleOption.setEvaluation(true);

            if(!order.getIsByVip()){
                if(order.getFreightType().intValue()==0){//配送方式为物流，可以查看物流
                    handleOption.setShowLogistics(true);
                }
                //判断订单是否过了有效售后周期,确认收货之日起
                Calendar confirmTime=DateUtils.convertLDTTOCalendar(order.getConfirmTime());
                if(LocalDateTime.now().isBefore(DateUtils.getDateAfter(confirmTime,period))){//在售后周期内可以申请售后
                    handleOption.setApplyAfterSale(true);
                }
            }

        } else if (OrderStatusEnums.TYPE4.getType() == status) {//已完成,可以删除订单,非自提订单可以查看物流，在售后周期内可以申请售后
            handleOption.setDelete(true);
            if(!order.getIsByVip()){
                if(order.getFreightType().intValue()==0){//配送方式为物流，可以查看物流
                    handleOption.setShowLogistics(true);
                }
                //判断订单是否过了有效售后周期,确认收货之日起
                Calendar confirmTime=DateUtils.convertLDTTOCalendar(order.getConfirmTime());
                if(LocalDateTime.now().isBefore(DateUtils.getDateAfter(confirmTime,period))){//在售后周期内可以申请售后
                    handleOption.setApplyAfterSale(true);
                }
            }

        } else if (OrderStatusEnums.TYPE5.getType() == status) {//已退款,可以删除订单
            handleOption.setDelete(true);
            if(!order.getIsByVip()){
                if(!StringUtils.isBlank(order.getShipSn())&&!StringUtils.isBlank(order.getShipChannel())&&order.getFreightType().intValue()==0){//有物流单号并且非自提订单可以查看物流
                    handleOption.setShowLogistics(true);
                }
            }
        }else if (OrderStatusEnums.TYPE6.getType() == status) {//已取消,可以删除
            handleOption.setDelete(true);
        }else if (OrderStatusEnums.TYPE8.getType() == status ||OrderStatusEnums.TYPE11.getType() == status) {//售后审核中或售后审核通过待用户上传退货物流信息状态，可以取消申请售后

            if(!order.getIsByVip()){
                handleOption.setCancelAfterSale(true);
                if(OrderStatusEnums.TYPE11.getType() == status){//待上传物流信息，可以上传物流信息
                    handleOption.setUploadReturnLogistics(true);
                }
            }

        }else if (OrderStatusEnums.TYPE7.getType() == status) {//退款处理中，是没有任何操作按钮的

        }else if (OrderStatusEnums.TYPE10.getType() == status) {//售后完成-已退款,可以删除订单
            handleOption.setDelete(true);
        }else if (OrderStatusEnums.TYPE12.getType() == status) {//待商家收货，可以查看退款物流信息
            if(!order.getIsByVip()){
                handleOption.setShowReturnLogistics(true);
            }
        }else {
            throw new AppException("未知的订单状态");
        }

        return handleOption;
    }

}
